package work.thread_eg.concurrent.lock;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

/**
 * CyclicBarrier的使用
 *
 * 作用：会让所有线程都等待完成后才会继续下一步行动。
 *
 * CyclicBarrier和CountDownLatch区别  countDownLatch是个计数器 一个线程可能操作多次
 * CyclicBarrier是一个线程算一次 对应构造函数的第一个参数
 *
 * 使用场景
 *
 */
public class CyclicBarrierTest01 {

    public static void main(String[] args) {

        // 第一个参数是参与的线程数 第二个参数是最后线程到达之后要做的任务
        CyclicBarrier cyclicBarrier = new CyclicBarrier(20, new Runnable() {
            @Override
            public void run() {
                System.out.println("满人 发车");
            }
        });

        for(int i=0; i<100;i++) {

            new Thread(()-> {
                try {
                    System.out.println(Thread.currentThread().getName());
                    cyclicBarrier.await();
                }catch (InterruptedException | BrokenBarrierException ex) {
                    ex.printStackTrace();
                }
            }).start();
        }


    }
}
